home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Applications / Python 1.3.3 / stdwin / Gen / waskfile.c next >
Text File  |  1995-12-21  |  1KB  |  62 lines

  1. /* STDWIN -- UNIVERSAL WASKFILE. */
  2.  
  3. #include "tools.h"
  4. #include "filedefs.h"
  5. #include "stdwin.h"
  6.  
  7. /* Ask for a file name; default is initial contents of buf.
  8.    Checks are made that the name typed is sensible:
  9.    if 'new' is TRUE, it should be writable or creatable,
  10.    and if it already exists confirmation is asked;
  11.    if 'new' is FALSE, it should exist. */
  12.  
  13. /* XXX This should also refuse to open directories */
  14.  
  15. bool
  16. waskfile(prompt, buf, len, new)
  17.     char *prompt;
  18.     char *buf;
  19.     int len;
  20.     bool new;
  21. {
  22.     for (;;) {
  23.         if (!waskstr(prompt, buf, len) || buf[0] == EOS)
  24.             return FALSE;
  25.         if (new) {
  26.             if (access(buf, NOMODE) >= 0) {    /* Existing file */
  27.                 if (access(buf, WMODE) >= 0) {
  28.                     switch (waskync(
  29.                         "Overwrite existing file?", 0)) {
  30.                     case -1:    return FALSE;
  31.                     case 1:        return TRUE;
  32.                     }
  33.                 }
  34.                 else
  35.                     wmessage("No write permission");
  36.             }
  37.             else {
  38.                 char *p= strrchr(buf, SEP);
  39.                 if (p == NULL) {
  40.                     if (access(CURDIR, WMODE) >= 0)
  41.                         return TRUE;
  42.                 }
  43.                 else {
  44.                     *p= EOS;
  45.                     if (access(buf, WMODE) >= 0) {
  46.                         *p= SEP;
  47.                         return TRUE;
  48.                     }
  49.                 }
  50.                 wmessage("Can't create file");
  51.             }
  52.         }
  53.         else {
  54.             if (access(buf, RMODE) >= 0)
  55.                 return TRUE;
  56.             wmessage("File not found");
  57.         }
  58.         break;
  59.     }
  60.     return FALSE;
  61. }
  62.